home *** CD-ROM | disk | FTP | other *** search
- #!/bin/sh
- #
- # shell script to generate a sendmail dom-tbl.m4 file containing all
- # the domain information for this site from a set of domain tables.
- #
-
- if [ $# -le 1 ]
- then echo usage: $0 [-ida file] files ... -top file
- exit
- fi
-
- rm -f $$.*
- outf=dom-tbl.m4
- strip="sed -e /#/s/#.*// -e /^\$/d"
- classes="ABCEFGHIKLM"
- cp /dev/null $$.S10
-
- ida=
- top=
- rest=
-
- while [ $# -gt 0 ]
- do
- case $1 in
- -o) outf=$2
- shift
- ;;
- -ida) ida="$ida $2"
- shift
- ;;
- -top) top="$top $2"
- shift
- ;;
- *) rest="$rest $1"
- ;;
- esac
- shift
- done
-
- if [ -n "$ida" ]
- then
- set $ida
- dbmfile=`basename $1 .dom`
-
- $strip $ida | awk '
- NF==1 { $2 = $1; $1 = substr($2, 1, index($2,".")-1) } # shorthand
- { print $1 " " $2 }
- ' | dbm load - $dbmfile
-
- echo "OKA`pwd`/$dbmfile" > $$.S10
- echo 'R$+@$+ $:$1@$(A $2 $) lookup db' >> $$.S10
- fi
-
- $strip $top | awk '{ printf "%s %s.TOP_LEVEL_DOM\n",$1,$1 }' > $$.top
-
- $strip $$.top $rest | awk '
- NR==1 { MINCLSIZE = 3
- c = 1
- S10 = prefix "S10"
- S11 = prefix "S11"
- S12 = prefix "S12"
- S13 = prefix "S13"
- cl_outd = prefix "classf"
- }
- NF==1 { $2 = $1 # shorthand
- $1 = substr($2, 1, index($2,".")-1)
- }
- { i = index($2,".")
- lpart = substr($2,1,i-1)
-
- if ($1 != lpart)
- printf "R$*%s\t\t$1%s\n", $1, $2 >> S10
- else
- { rpart = substr($2,i+1)
- domain[rpart] = domain[rpart] " " lpart
- n = split(rpart, doms, ".")
- rparts[rpart] = n
- }
- }
-
- END {
- for (i in rparts)
- { order[rparts[i]] = order[rparts[i]] " " i
- if (rparts[i] > maxn)
- maxn = rparts[i]
- }
-
- for (i=1; i <= maxn; i++)
- { m = split(order[i], rpts, " ")
- for (j=1; j<=m; j++)
- { rhs = rpts[j]
- d = split(domain[rhs], subdoms, " ")
-
- if (rhs == "TOP_LEVEL_DOM")
- printf "\nCT%s\n", domain[rhs] >cl_outd
- else if (d >= MINCLSIZE && c <= length(classes))
- { C = substr(classes, c, 1)
- c++
- printf "\nD%s%s\n", C, rhs >cl_outd
- printf "C%s%s\n", C, domain[rhs] >cl_outd
- printf "R$*$=%s\t\t\t$@$1$2.$%s\t\tu@d -> u@d.%s\n", \
- C, C, rhs >S11
- printf "R$*$=%s.$%s\t\t$@$1$2\t\tu@d.%s -> u@d\n", \
- C, C, rhs >S12
- printf "R$*$=%s\t\t\t$@$1$2\n", C >S13
- printf "R$*@$=%s.$+\t\t$@$>9$1@$2.$3\n", C >S13
- }
- else
- { for (k=1; k<=d; k++)
- { printf "R$*%s\t\t$@$1%s.%s\n", subdoms[k], \
- subdoms[k], rhs >S11
- printf "R$*%s.%s\t\t$@$1%s\n", subdoms[k], \
- rhs, subdoms[k] >S12
- printf "R$*%s\t\t\t$@$1%s\n", \
- subdoms[k], subdoms[k] >S13
- printf "R$*@%s.$+\t\t$@$>9$1@%s.$2\n", \
- subdoms[k], subdoms[k] >S13
- }
- }
- }
- }
- }
- ' prefix=$$. classes=$classes -
-
- #
- # The header
- #
- cat > $outf <<EOF
- ###############################################################################
- #####
- ##### @(#)$outf UK-2.1 sendmail configuration 18/11/88
- #####
- ##### The domain database and rules
- #####
- ###############################################################################
-
- # classes
- EOF
-
- #
- # generate classes
- #
- while read class group
- do
- echo $group | tr ' ' '\012' | fmt | sed "s/^/$class/"
- done < $$.classf >> $outf
-
-
- #
- # Ruleset 10
- #
- cat - $$.S10 >> $outf <<'EOF'
-
- ##########################################
- # Ruleset 10 -- domain name aliasing #
- ##########################################
-
- S10
- EOF
-
- #
- # Ruleset 11
- #
- cat - $$.S11 >> $outf <<'EOF'
-
- ########################################################
- # Ruleset 11 -- Expand address to full domain name #
- ########################################################
-
- S11
- R$*$=T $@$1$2 already fully qualified
- EOF
-
- #
- # Ruleset 12
- #
- cat >> $outf <<'EOF'
-
- ifdef(`LOCALSHOWUUCP',`
- ############################################################
- # Ruleset 12 -- Strip full domain name to minimum part #
- ############################################################
-
- S12
- EOF
- ( tail -r $$.S12 ; echo "')" ) >> $outf
-
- #
- # Ruleset 13
- #
- cat - $$.S13 >> $outf <<'EOF'
-
- ifdef(`NRSFORMAT',`
- ###############################################################
- # Ruleset 13 -- Convert domains in NRS order to 822 order #
- ###############################################################
-
- S13
- R$*$=T $@$1$2
- R$*@$=T.$+ $@$>9$1@$2.$3
- EOF
- echo "')" >> $outf
-
- rm -f $$.*
- exit
-